﻿using MoreMountains.Tools;

namespace Gp.Scripts.Core {
    public abstract class BaseInventory {
        public bool IsDirty { get; set; } = false;

        public abstract string SaveKey { get; }

        // public void FillData(SerializedInventory serializedInventory) {
        //     ExtractSerializedInventory(serializedInventory);
        // }
        //
        //
        // public SerializedInventory SerializedData() {
        //     SerializedInventory data = new();
        //     FillSerializedInventory(data);
        //     return data;
        // }


        // protected override void FillSerializedInventory(SerializedInventory serializedInventory) {
        //     serializedInventory.InventoryName = SaveKey;
        //
        //
        //     serializedInventory.InventoryType = InventoryType;
        //     serializedInventory.DrawContentInInspector = DrawContentInInspector;
        //     serializedInventory.ContentType = new string[Content.Length];
        //     serializedInventory.ContentQuantity = new int[Content.Length];
        //
        //
        //     for (int i = 0; i < Content.Length; i++) {
        //         if (!InventoryItem.IsNull(Content[i])) {
        //             serializedInventory.ContentType[i] = Content[i].ItemID;
        //             serializedInventory.ContentQuantity[i] = Content[i].Quantity;
        //         }
        //         else {
        //             serializedInventory.ContentType[i] = null;
        //             serializedInventory.ContentQuantity[i] = 0;
        //         }
        //     }
        // }


        // protected override void ExtractSerializedInventory(SerializedInventory serializedInventory) {
        //     if (serializedInventory == null) {
        //         return;
        //     }
        // //     
        // //     InventoryType = serializedInventory.InventoryType;
        // //     DrawContentInInspector = serializedInventory.DrawContentInInspector;
        // //     Content = new InventoryItem[serializedInventory.ContentType.Length];
        // //     for (int i = 0; i < serializedInventory.ContentType.Length; i++) {
        // //         var saveId = serializedInventory.ContentType[i];
        // //         if (!saveId.IsNullOrEmpty()) {
        // //             var loadedInventoryItem =
        // //                 SystemDataBase.Instance.allInventoryItems.FirstOrDefault(x =>
        // //                     x.GetID == saveId);
        // //
        // //             if (loadedInventoryItem == null) {
        // //                 Content[i] = InventoryObjectDto.Build(SystemDataBase.Instance.errorObject);
        // //             }
        // //             else {
        // //                 Content[i] = InventoryObjectDto.Build(loadedInventoryItem);
        // //                 Content[i].Quantity = serializedInventory.ContentQuantity[i];
        // //             }
        // //         }
        // //         else {
        // //             Content[i] = null;
        // //         }
        // //     }
        // }


        // public override bool RemoveItem(int i, int quantity) {
        //     return base.RemoveItem(i, quantity);
        // }


        //
        // public sealed override void SaveInventory() { }
        //
        //
        // public sealed override void LoadSavedInventory() { }



        // public virtual void OnLoad(SerializedInventory data) {
        //     FillData(data);
        // }
        //
        //
        //
        //
        //
        //
        //
        // public sealed override void OnMMEvent(MMInventoryEvent inventoryEvent) {
        //     if (inventoryEvent.InventoryEventType == MMInventoryEventType.ContentChanged) {
        //         IsDirty = true;
        //         OnContentChange();
        //     }
        //     
        //     base.OnMMEvent(inventoryEvent);
        // }
        // public sealed override void OnMMEvent(MMGameEvent gameEvent) { }


        protected virtual void OnContentChange() {
            
        }
    }
}